#pragma once


#include <stdint.h>
#include "Common/EventDefine.h"
#include "Duplicate/IDuplicate.h"

struct IBrushMonster
{
	virtual ~IBrushMonster(){}
	virtual int8_t GetBrushType() = 0;
	virtual bool Init(IDuplicate *pDuplicate) = 0;
	virtual void UnInit() = 0;
	//获取总波数
	virtual int32_t MonsterWave(){ return 0; };
	//获取当前层数
	virtual int32_t CurLayer()  { return 0; };
	//获取总层数
	virtual int32_t TotalLayer() { return 0; };
	//开始刷怪
	virtual void StartBrush() = 0;
	//停止刷怪
	virtual void StopBrush() = 0;
	//是否刷怪完成
	virtual bool FinishBrush() = 0;
	//刷怪更新
	virtual void BrushUpdate() = 0;
	//区域刷怪
	virtual bool EnterAreaBrush(uint32_t areaId){ areaId = areaId; return false; }
	//怪物死亡
	virtual void OnMonterDead(uint64_t monsCid, uint32_t monsId, uint32_t count, int32_t formationId, uint64_t killerCid){};
	//获取boss状态
	virtual void GetBossState(MAP_UINT32_INT8 &mapState){};
	//脚本刷出的怪是否全部死亡
	virtual bool BrushMonsAllDie() {return false;}
	//获取当前波怪物信息
	virtual void GetCurWaveInfo(int32_t &curWave,int32_t &monsDie,int32_t &totalMons,SET_UINT32 &setBoss){}
	//是否是有效怪
	virtual bool ValidMons(uint64_t monsCid, int8_t &byBoss){ return false; };
	//刷新步骤引导和特效怪物组
	virtual void BrushGuideMonsGroup(){};
};